from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound, HttpResponseRedirect
from django.urls import reverse

# Create your views here.
zodiac_dict = {
    'aries': 'Овен - первый знак зодиака, планета Марс (с 21 марта по 20 апреля).',
    'taurus': 'Телец - второй знак зодиака, планета Венера (с 21 апреля по 21 мая).',
    'gemini': 'Близнецы - третий знак зодиака, планета Меркурий (с 22 мая по 21 июня).',
    'cancer': 'Рак - четвёртый знак зодиака, Луна (с 22 июня по 22 июля).',
    'leo': 'Лев - <i>пятый знак зодиака</i>, солнце (с 23 июля по 21 августа).',
    'virgo': 'Дева - шестой знак зодиака, планета Меркурий (с 22 августа по 23 сентября).',
    'libra': ' Весы - седьмой знак зодиака, планета Венера (с 24 сентября по 23 октября).',
    'scorpio': 'Скорпион - восьмой знак зодиака, планета Марс (с 24 октября по 22 ноября).',
    'sagittarius': 'Стрелец - девятый знак зодиака, планета Юпитер (с 23 ноября по 22 декабря).',
    'capricorn': 'Козерог - десятый знак зодиака, планета Сатурн (с 23 декабря по 20 января).',
    'aquarius': 'Водолей - одиннадцатый знак зодиака, планеты Уран и Сатурн (с 21 января по 19 февраля).',
    'pisces': 'Рыбы - двенадцатый знак зодиака, планеты Юпитер (с 20 февраля по 20 марта).'
}

elements = {
    "fire": ['aries', 'leo', 'sagittarius'],
    "earth": ['taurus', 'virgo', 'capricorn'],
    "air": ['gemini', 'libra', 'aquarius'],
    "water": ['cancer', 'scorpio', 'pisces']
}

horo_year = {
    'января': 31,
    'февраля': 28,
    'марта': 31,
    'апреля': 30,
    'мая': 31,
    'июня': 30,
    'июля': 31,
    'августа': 31,
    'сентября': 30,
    'октября': 31,
    'ноября': 30,
    'декабря': 31,
}


def index(request):
    zodiacs = list(zodiac_dict)
    #f'<li><a href="{redirect_path}">{sign.title()}</a></li>'
    context = {
        'zodiacs': zodiacs,
        'zodiac_dict': zodiac_dict
    }
    return render(request, 'horoscope/index.html', context=context)


def index_elements(request):
    menu_elements = list(elements)
    li_tag = ''
    for element in menu_elements:
        redirect_path = reverse("el_category", args=(element,))
        li_tag += f'<li><a href={redirect_path}>{element.title()}</li>'

    response = f"""
    <ul>
    {li_tag}
    </ul>
    """
    return HttpResponse(response)


def elements_category(request, category: str):
    if category in elements.keys():
        li_tag = ''
        for i in elements[category]:
            redirect_path = reverse("horoscope-name", args=(i,))
            li_tag += f'<li><a href={redirect_path}>{i.title()}</li>'

        response = f"""
            <ul>
            {li_tag}
            </ul>
            """
        return HttpResponse(response)
    else:
        return HttpResponseNotFound(f"Стихии {category} нет!")


def get_info_about_sign_zodiac(request, sign_zodiac: str):
    description = zodiac_dict.get(sign_zodiac)
    zodiacs = list(zodiac_dict)
    data = {
        "description_zodiac": description,
        'sign': sign_zodiac.title(),
        'sign_name': description.split()[0],
        'zodiacs': zodiacs,


    }

    return render(request, 'horoscope/info_zodiac.html', context=data)


def get_info_about_sign_zodiac_by_number(request, sign_zodiac: int):
    zodiacs = list(zodiac_dict)
    if len(zodiacs) < sign_zodiac or sign_zodiac < 1:
        return HttpResponseNotFound(f'Неправильный порядковый номер знака зодикака - {sign_zodiac}')
    name_zodiacs = zodiacs[sign_zodiac - 1]
    redirect_url = reverse("horoscope-name", args=(name_zodiacs,))  # ~args=[name_zodiacs]
    return HttpResponseRedirect(redirect_url)
    # return HttpResponse(f"This is number {sign_zodiac}")


def horoscope_determinant(request, month: int, day: int):
    if 1 <= month <= 12:  # and 0 < day <= horo_year[list(horo_year)[month - 1]]:
        if 0 < day <= horo_year[list(horo_year)[month - 1]]:
            m = list(horo_year)[month - 1]
            for k, v in zodiac_dict.items():
                if m in v:
                    if day > int(v[v.index(m) - 3:v.index(m) - 1]) and v.index(m) == (len(v) - len(m) - 2):
                        continue

                    else:
                        redirect_url = reverse("horoscope-name", args=(k,))  # ~args=[name_zodiacs]
                        return HttpResponseRedirect(redirect_url)


        else:
            return HttpResponseNotFound(f'<h2>Вы указали неверный месяц - {day}</h2>')
    else:
        return HttpResponseNotFound(f'<h2>Вы указали неверный месяц - {month}</h2>')


def get_yyyy_converters(request, sign_zodiac):
    return HttpResponse(f"Вы передали число из 4х цифр - {sign_zodiac}")


def get_my_float_converters(request, sign_zodiac):
    return HttpResponse(f"Вы передали вещественное число <h4>{sign_zodiac}</h4>")


def get_my_date_converters(request, sign_zodiac):
    return HttpResponse(f"Вы передали дату <h4>{sign_zodiac}</h4>")
